Чему будет равен остаток от деления 2n на 10?
Вход. Единственное неотрицательное число n (0 ≤ n ≤ 109).
Выход. Выведите остаток
от деления 2n на 10.
Пример входа
4
Пример выхода
6
возведение в степень
В задаче следует
вычислить 2n mod 10 за
время O(log2n).
Рассмотрим также
математическое решение. Заметим, что 21 = 2, 22 = 4, 23
= 8, 24 = 16, 25 = 32. Остаток от деления на 10 – это
последняя цифра степени 2n,
она повторяется: 2, 4, 8, 6. То есть
·
если n % 4 == 1, то
2n mod 10 = 2,
·
если n % 4 == 2, то
2n mod 10 = 4,
·
если n % 4 == 3, то
2n mod 10 = 8,
·
если n % 4 == 0, то
2n mod 10 = 6
Следует отдельно
обработать случай n = 0, тогда 20
mod 10 = 1.
Реализация алгоритма
#include <stdio.h>
__int64 n, res;
__int64 powmod(__int64
x, __int64 n, __int64
m)
{
if (n == 0) return 1;
if (n % 2 == 0) return
powmod((x * x) % m, n / 2, m);
return (x * powmod(x, n - 1, m)) % m;
}
int main(void)
{
scanf("%I64d",&n);
res = powmod(2,n,10);
printf("%I64d\n",res);
return 0;
}
Реализация алгоритма – математическое решение
#include <stdio.h>
int n;
int main(void)
{
scanf("%d",&n);
if (n == 0) printf("1\n");
else
if (n % 4 == 1) printf("2\n");
else
if (n % 4 == 2) printf("4\n");
else
if (n % 4 == 3) printf("8\n");
else
printf("6\n");
return 0;
}